irq: Add extra debugging to help track down why an assertion is failing
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 7 Feb 2012 18:44:12 +0000 (18:44 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 7 Feb 2012 18:44:12 +0000 (18:44 +0000)
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Keir Fraser <keir@xen.org>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
xen/arch/x86/irq.c

index bbcfa0988adff37ba00978ba40002dbf45924e7d..e9e1a9e552acf2035a0569fb3a028b1901fe4a2a 100644 (file)
@@ -608,6 +608,8 @@ void move_native_irq(struct irq_desc *desc)
     desc->handler->enable(desc);
 }
 
+static void dump_irqs(unsigned char key);
+
 fastcall void smp_irq_move_cleanup_interrupt(struct cpu_user_regs *regs)
 {
     unsigned vector, me;
@@ -667,7 +669,18 @@ fastcall void smp_irq_move_cleanup_interrupt(struct cpu_user_regs *regs)
 
             if ( desc->arch.used_vectors )
             {
-                ASSERT(test_bit(vector, desc->arch.used_vectors));
+                if ( unlikely(!test_bit(vector, desc->arch.used_vectors)) )
+                {
+                    bitmap_scnlistprintf(keyhandler_scratch,
+                                         sizeof(keyhandler_scratch),
+                                         desc->arch.used_vectors->_bits,
+                                         NR_VECTORS);
+                    printk("*** IRQ BUG found ***\n"
+                           "CPU%d -Testing vector %d from bitmap %s\n",
+                           me, vector, keyhandler_scratch);
+                    dump_irqs('i');
+                    BUG();
+                }
                 clear_bit(vector, desc->arch.used_vectors);
             }
         }